﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Gargoyle.ZZT
{
    public static class SoundPresets
    {
        public static byte[] Ammo()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x31, 0x01,
                0x32, 0x01
            };
        }

        public static byte[] BombActivate()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x35, 0x01,
                0x40, 0x01,
                0x45, 0x01,
                0x50, 0x01
            };
        }

        public static byte[] BombExplode()
        {
            return new byte[]
            {
                0x60, 0x01,
                0x50, 0x01,
                0x40, 0x01,
                0x30, 0x01,
                0x20, 0x01
            };
        }

        public static byte[] BombTick()
        {
            return new byte[]
            {
                0xF8, 0x01
            };
        }

        public static byte[] BombTock()
        {
            return new byte[]
            {
                0xF5, 0x01,
            };
        }

        public static byte[] BulletDie()
        {
            return new byte[]
            {
                0x20, 0x01
            };
        }

        public static byte[] Cheat()
        {
            return new byte[]
            {
                0x27, 0x04
            };
        }

        public static byte[] DoorLocked()
        {
            return new byte[]
            {
                0x17, 0x01,
                0x10, 0x01
            };
        }

        public static byte[] DoorOpen()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x37, 0x01,
                0x3B, 0x01,
                0x30, 0x01,
                0x37, 0x01,
                0x3B, 0x01,
                0x40, 0x04
            };
        }

        public static byte[] Duplicate()
        {
            return new byte[]
            {
                0x30, 0x02,
                0x32, 0x02,
                0x34, 0x02,
                0x35, 0x02,
                0x37, 0x02
            };
        }

        public static byte[] DuplicateFail()
        {
            return new byte[]
            {
                0x18, 0x01,
                0x16, 0x01
            };
        }

        public static byte[] EnemyDie()
        {
            return new byte[]
            {
                0x40, 0x01,
                0x10, 0x01,
                0x50, 0x01,
                0x30, 0x01
            };
        }

        public static byte[] EnemyShoot()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x26, 0x01
            };
        }

        public static byte[] EnemySuicide()
        {
            return new byte[]
            {
                0x10, 0x01
            };
        }

        public static byte[] Energizer()
        {
            return new byte[]
            {
                0x20, 0x03,

                0x23, 0x03,
                0x24, 0x03,
                0x25, 0x03,
                0x35, 0x03,
                0x25, 0x03,
                0x23, 0x03,
                0x20, 0x03,
                0x30, 0x03,

                0x23, 0x03,
                0x24, 0x03,
                0x25, 0x03,
                0x35, 0x03,
                0x25, 0x03,
                0x23, 0x03,
                0x20, 0x03,
                0x30, 0x03,

                0x23, 0x03,
                0x24, 0x03,
                0x25, 0x03,
                0x35, 0x03,
                0x25, 0x03,
                0x23, 0x03,
                0x20, 0x03,
                0x30, 0x03,

                0x23, 0x03,
                0x24, 0x03,
                0x25, 0x03,
                0x35, 0x03,
                0x25, 0x03,
                0x23, 0x03,
                0x20, 0x03,
                0x30, 0x03,

                0x23, 0x03,
                0x24, 0x03,
                0x25, 0x03,
                0x35, 0x03,
                0x25, 0x03,
                0x23, 0x03,
                0x20, 0x03,
                0x30, 0x03,

                0x23, 0x03,
                0x24, 0x03,
                0x25, 0x03,
                0x35, 0x03,
                0x25, 0x03,
                0x23, 0x03,
                0x20, 0x03,
                0x30, 0x03,

                0x23, 0x03,
                0x24, 0x03,
                0x25, 0x03,
                0x35, 0x03,
                0x25, 0x03,
                0x23, 0x03,
                0x20, 0x03
            };
        }

        public static byte[] EnergyOut()
        {
            return new byte[]
            {
                0x20, 0x03,
                0x1A, 0x03,
                0x17, 0x03,
                0x16, 0x03,
                0x15, 0x03,
                0x13, 0x03,
                0x10, 0x03
            };
        }

        public static byte[] Error()
        {
            return new byte[]
            {
                0x50, 0x0A
            };
        }

        public static byte[] Forest()
        {
            return new byte[]
            {
                0x39, 0x01
            };
        }

        public static byte[] ForestSuperZZT()
        {
            return new byte[]
            {
                0x45, 0x01,
                0x40, 0x01,
                0x47, 0x01,
                0x50, 0x01,
                0x46, 0x01,
                0x41, 0x01,
                0x48, 0x01,
                0x50, 0x01
            };
        }

        public static byte[] GameOver()
        {
            return new byte[]
            {
                0x20, 0x03,
                0x23, 0x03,
                0x27, 0x03,
                0x30, 0x03,
                0x27, 0x03,
                0x2A, 0x03,
                0x32, 0x03,
                0x37, 0x03,
                0x35, 0x03,
                0x38, 0x03,
                0x40, 0x03,
                0x45, 0x03,
                0x10, 0x0A
            };
        }

        public static byte[] Gem()
        {
            return new byte[]
            {
                0x40, 0x01,
                0x37, 0x01,
                0x34, 0x01,
                0x30, 0x01
            };
        }

        public static byte[] Invisible()
        {
            return new byte[]
            {
                0x12, 0x01,
                0x10, 0x01
            };
        }

        public static byte[] Key()
        {
            return new byte[]
            {
                0x40, 0x01,
                0x44, 0x01,
                0x47, 0x01,
                0x40, 0x01,
                0x44, 0x01,
                0x47, 0x01,
                0x40, 0x01,
                0x44, 0x01,
                0x47, 0x01,
                0x50, 0x02
            };
        }

        public static byte[] KeyAlready()
        {
            return new byte[]
            {
                0x30, 0x02,
                0x20, 0x02
            };
        }

        public static byte[] Ouch()
        {
            return new byte[]
            {
                0x10, 0x01,
                0x20, 0x01,
                0x13, 0x01,
                0x23, 0x01
            };
        }

        public static byte[] Passage()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x34, 0x01,
                0x37, 0x01,
                0x31, 0x01,
                0x35, 0x01,
                0x38, 0x01,
                0x32, 0x01,
                0x36, 0x01,
                0x39, 0x01,
                0x33, 0x01,
                0x37, 0x01,
                0x3A, 0x01,
                0x34, 0x01,
                0x38, 0x01,
                0x40, 0x01
            };
        }

        public static byte[] Push()
        {
            return new byte[]
            {
                0x15, 0x01
            };
        }

        public static byte[] Ricochet()
        {
            return new byte[]
            {
                0xF9, 0x01
            };
        }

        public static byte[] Shoot()
        {
            return new byte[]
            {
                0x40, 0x01,
                0x30, 0x01,
                0x20, 0x01
            };
        }

        public static byte[] SlimeDie()
        {
            return new byte[]
            {
                0x20, 0x01,
                0x23, 0x01
            };
        }

        public static byte[] TimeLow()
        {
            return new byte[]
            {
                0x40, 0x06,
                0x45, 0x06,
                0x40, 0x06,
                0x35, 0x06,
                0x40, 0x06,
                0x45, 0x06,
                0x40, 0x0A
            };
        }

        public static byte[] TimeOut()
        {
            return new byte[]
            {
                0x20, 0x01,
                0x23, 0x01,
                0x27, 0x01,
                0x30, 0x01,
                0x10, 0x01
            };
        }

        public static byte[] Torch()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x39, 0x01,
                0x34, 0x02
            };
        }

        public static byte[] TorchOut()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x20, 0x01,
                0x10, 0x01
            };
        }

        public static byte[] Transporter()
        {
            return new byte[]
            {
                0x30, 0x01,
                0x42, 0x01,
                0x34, 0x01,
                0x46, 0x01,
                0x38, 0x01,
                0x4A, 0x01,
                0x40, 0x01,
                0x52, 0x01
            };
        }

        public static byte[] Water()
        {
            return new byte[]
            {
                0x40, 0x01,
                0x50, 0x01
            };
        }
    }
}
